package metier;
import java.util.List;

import modele.Utilisateur;
import org.hibernate.Session;
import org.hibernate.Transaction;

import utils.Util;
import utils.Utilitaire;
import dao.ModuleprofilDAO;
import dao.UtilisateurDAO;

import persistence.BaseDAO;


public class UtilisateurManager {
	
	public static List getUsers(int start, int limit)	throws Exception {
		Session session = BaseDAO.getInstance().openSession();
		try {
			List list  = UtilisateurDAO.getListUtilisateurs("from Utilisateur",session,start,limit);
			session.close();
			return list;
		} catch (Exception e) {
			e.printStackTrace();			
			throw new Exception(e.getMessage());
		}
	}
	
	public static Utilisateur getUserBySession(String sesUser,int idUser)	throws Exception {
		Session session = BaseDAO.getInstance().openSession();
		try {
			Utilisateur u  = UtilisateurDAO.getUtilisateur(idUser, session);
			session.close();
			if((u != null) && (u.getSession().equals(sesUser)))
				return u;
			else
				return null;
		} catch (Exception e) {
			e.printStackTrace();			
			throw new Exception(e.getMessage());
		}
	}

	public static Utilisateur login(String login, String pw) throws Exception {
		Session session = BaseDAO.getInstance().openSession();
		Utilisateur u=null;
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			List list  = UtilisateurDAO.getListUtilisateurs("from Utilisateur u where u.login='"+login+"' AND u.pw='"+Util.getEncodedPassword(pw)+"'",session);
			if(list.size()>0)
			{
				u=(Utilisateur)list.get(0);
				String ses=Utilitaire.generate(60);
				u.setSession(ses);
				UtilisateurDAO.modifierUtilisateur(u, session);
				tx.commit();
			}
			session.close();
		}catch (Exception e) {
			e.printStackTrace();			
			throw new Exception(e.getMessage());
		}
		return  u;
	}

	public static List getProdilsUserBySession(String sesUser) throws Exception {
		Session session = BaseDAO.getInstance().openSession();
		try {
			List list  = UtilisateurDAO.getListUtilisateurs("from Utilisateur u left join fetch u.profil p left join fetch p.moduleprofils mp where u.session='"+sesUser+"'",session);
			session.close();
			if(list.size()>0)
			{
				Utilisateur u=(Utilisateur) list.get(0);
				return u.getProfil().getModuleprofils();
			}				
			else
				return null;
		} catch (Exception e) {
			e.printStackTrace();			
			throw new Exception(e.getMessage());
		}
	}
	public static List getModuleprofil(int start, int limit) throws Exception {
		Session session = BaseDAO.getInstance().openSession();
		try {
			List list  = ModuleprofilDAO.getListModuleprofil("from Moduleprofil",session,start,limit);
			session.close();
			return list;
		}catch (Exception e) {
			e.printStackTrace();			
			throw new Exception(e.getMessage());
		}
	}
}